package repertorioInstrucciones;

import comun.Natural;

import maquina.Dato;
import maquina.PilaTrabajo;

public class CambioSigno extends Instruccion {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public CambioSigno(){
		super();
	}
	@Override
	public PilaTrabajo accion(PilaTrabajo pilaT) {
		
		Dato a =  (Dato) pilaT.getPila().pop();
		//si es float se queda float con signo cambiado
		if (a.getDato() instanceof Float){
			float f = (Float) a.getDato();
			f= 0-f;
			Dato<Float> d = new Dato<Float>(f);
			pilaT.getPila().push(d);
		//si es Natural pasa a entero con signo cambiado
		}else if (a.getDato() instanceof Natural){
			int n = ((Natural) a.getDato()).getValor();
			n = 0-n;
			Dato<Integer> d = new Dato<Integer>(n);
			pilaT.getPila().push(d);
		//si es entero se queda entero con signo cambiado
		}else{
			int n = (Integer) a.getDato();
			n = 0-n;
			Dato<Integer> d = new Dato<Integer>(n);
			pilaT.getPila().push(d);
		}
		
		return pilaT;
	}

}
